水無瀬の部屋 > Programming > sample > tools > misc > crc32.cpp |
---|
1: //*********************************************************
2: // プロジェクト: TOOLS::CRC
3: // ファイル名: crc32.cpp
4: //*********************************************************
5: #include <misc/crc32.h>
6: #include <misc/binary.h>
7: #include <header/tooldbg.h>
8: #include <header/toolbase.h>
9: #include <limits.h>
10:
11:
12: //---------------------------------------------------------
13: // 定数型マクロ の 定義
14: //---------------------------------------------------------
15: #define DBG_ALLOCNAME "CRC32_CreateAlgorithm"
16:
17:
18: //---------------------------------------------------------
19: // 構造体 の 宣言
20: //---------------------------------------------------------
21: typedef struct CRC32_CTX_tag
22: {
23: DWORD crc;
24: DWORD tbl[ UCHAR_MAX+1 ];
25: } CRC32_CTX;
26:
27:
28: //---------------------------------------------------------
29: // ファイルスコープ変数 の 定義
30: //---------------------------------------------------------
31:
32:
33: //*********************************************************
34: // CRC32_CreateAlgorithm
35: //*********************************************************
36: CRC32_CTX *
37: CRC32_CreateAlgorithm
38: (
39: WORD poly
40: )
41: {
42: CRC32_CTX *context = (CRC32_CTX *)malloc( sizeof( *context ) );
43: if ( !context )
44: return null;
45:
46: CRC32_InitData( context, poly );
47:
48: DBG_LOCK_ALLOCED_MEMORY( context, DBG_ALLOCNAME ); // [DBG]
49: return context;
50: }//CRC32_CreateAlgorithm
51:
52: //*********************************************************
53: // CRC32_DestroyAlgorithm
54: //*********************************************************
55: bool
56: CRC32_DestroyAlgorithm
57: (
58: CRC32_CTX *context
59: )
60: {
61: // パラメタの仮定
62: ASSERT( IsValidPtr( context, sizeof( *context ) ) );
63:
64: DBG_UNLOCK_ALLOCED_MEMORY( context, DBG_ALLOCNAME ); // [DBG]
65: free( context );
66:
67: return true;
68: }//CRC32_DestroyAlgorithm
69:
70: //*********************************************************
71: // CRC32_InitData
72: //*********************************************************
73: bool
74: CRC32_InitData
75: (
76: CRC32_CTX *context,
77: DWORD poly
78: )
79: {
80: // パラメタの仮定
81: ASSERT( IsValidPtr( context, sizeof( *context ) ) );
82:
83: //
84: context->crc = 0xFFFFFFFF;
85:
86: //
87: {for( int i = 0; i <= UCHAR_MAX; ++i )
88: {
89: DWORD tmp32 = static_cast<DWORD>( i );
90: {for( int j = 0; j < CHAR_BIT; ++j )
91: {
92: tmp32 = static_cast<DWORD>( (0 != (tmp32 & 0x01)) ? ((tmp32 >> 1) ^ poly) : (tmp32 >> 1) );
93: }}
94: context->tbl[ i ] = tmp32;
95: }}
96:
97: return true;
98: }//CRC32_InitData
99:
100: //*********************************************************
101: // CRC32_AddData
102: //*********************************************************
103: DWORD
104: CRC32_AddData
105: (
106: CRC32_CTX *context,
107: const void *data,
108: int length
109: )
110: {
111: //
112: const BYTE *p = static_cast<const BYTE *>( data );
113:
114: //
115: {for( int i = 0; i < length; ++i )
116: {
117: context->crc = static_cast<DWORD>( (context->crc >> CHAR_BIT) ^ context->tbl[ p[ i ] ^ static_cast<BYTE>( context->crc ) ] );
118: }}
119:
120: return 0xFFFFFFFF ^ context->crc;
121: }//CRC32_AddData
122:
123:
124: //** end **
参照:
水無瀬の部屋 > sample > tools > misc > crc32.cpp |
---|
このページは cpp2web が出力しました。
水無瀬 優 postmaster@katsura-kotonoha.sakura.ne.jp
http://katsura-kotonoha.sakura.ne.jp/prog/code/tools/misc/crc32_cpp.shtml
>> Amazon.co.jp 『たまゆら童子』 へ
>> 楽天ブックス 『たまゆら童子』 へ